package com.qdlc.p2p.common.util;

import java.util.Calendar;
import java.util.Date;


/**
 * 积分计算
 * @author xx
 * @version 2.0
 * @since 2013-7-26
 */
public class ScoreCountTool {

	private static int DEF_DIV_SCALE = 0; //默认精确的小数位   
	
	/**
	 * 投资积分计算规则1(除type外，所有参数，必传)  暂时未使用
	 * @param type 1天标/0月标
	 * @param time 1天标：天数。0月标：月数。
	 * @param tenderMoney 投资总额
	 * @param checkMoney 限制金额
	 * @return
	 * 注：投资额*月份/1000（月标）；投资额*天数/30/1000（天标）。小数取整。
	 */
	public static int getTenderValueMethodOne(byte type , int time , double tenderMoney, double checkMoney){
		
		// 判断参数是否为空，如果任何一个为空，则return
		if (tenderMoney <= 0 || checkMoney <= 0 || time <= 0)
			return 0;

		// 天标算法
		if (type == 1) {
			double t = BigDecimalUtil.mul(tenderMoney, time);// 投资额*天数
			double f = BigDecimalUtil.div(t, checkMoney, DEF_DIV_SCALE);// 投资额*天数/限制金额
			double y = BigDecimalUtil.div(f, 30, DEF_DIV_SCALE);// 投资额*天数/限制金额/30(天标除以30天)
			return (int) y;
		} else if (type == 0) {// 月标算法
			double t = BigDecimalUtil.mul(tenderMoney, time);// 投资额*月数
			double f = BigDecimalUtil.div(t, checkMoney, DEF_DIV_SCALE);// 投资额*月数/限制金额
			return (int) f;
		}
		return 0;
	}
	
	/**
	 * 投资积分计算规则1(除type外，所有参数，必传)
	 * @param isDate 1天标：如果为1表示天标， 如果为0表示月标
	 * @param time_limit //表示时间长短  如果月则是月长短，如果是天则是天数
	 * @param tenderMoney 投资总额
	 * @param checkMoney 限制金额、基数，多少金额是换成一个积分
	 * @param decimal_manage 小数处理限制
	 * @return
	 * 注：   积分= 投资额*月份/月标基数金额；投资额*天数/天标基数金额。小数根据小数规则，进行处理。
	 */
	public static int getTenderValue(int isDate ,int time_limit, double tenderMoney, double checkMoney , double decimal_manage){
		
		// 判断参数是否为空，如果任何一个为空，则return
		if (tenderMoney <= 0 || checkMoney <= 0 || isDate < 0)
			return 0;
		double score = 0.0;// 应得积分
		if (isDate == 1) {// 表示天标
			score = (tenderMoney * time_limit) / checkMoney;// 投资额*天数/天标基数金额
		}
		if (isDate == 0) {// 表示月标
			score = (tenderMoney * daysBetween(time_limit)) / checkMoney;//
		}
		int value = (int) score;
		double decimal = score - value;
		if (decimal >= decimal_manage) {
			return value + 1;
		}
		return (int) value;
	}
	
	/**
	 * 功能描述：计算当前日期   几个月之后的天数  <br/>
	 */
	public static int daysBetween(int limitMonth){
		Date smdate = new Date();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(smdate);
		calendar.add(Calendar.MONTH, limitMonth);
		Date bdate = calendar.getTime();// 得到结束的日期

		// 计算结束日期和当前日期的天数
		Calendar cal = Calendar.getInstance();
		cal.setTime(smdate);
		long time1 = cal.getTimeInMillis();
		cal.setTime(bdate);
		long time2 = cal.getTimeInMillis();
		long between_days = (time2 - time1) / (1000 * 3600 * 24);
		return Integer.parseInt(String.valueOf(between_days));
	}
}
